home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Linux / Kubuntu 8.10 / kubuntu-8.10-desktop-i386.iso / casper / filesystem.squashfs / usr / lib / python2.5 / lib-tk / tkFont.pyc (.txt) < prev    next >
Python Compiled Bytecode  |  2008-10-29  |  7KB  |  210 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.5)
  3.  
  4. __version__ = '0.9'
  5. import Tkinter
  6. NORMAL = 'normal'
  7. ROMAN = 'roman'
  8. BOLD = 'bold'
  9. ITALIC = 'italic'
  10.  
  11. def nametofont(name):
  12.     '''Given the name of a tk named font, returns a Font representation.
  13.     '''
  14.     return Font(name = name, exists = True)
  15.  
  16.  
  17. class Font:
  18.     """Represents a named font.
  19.  
  20.     Constructor options are:
  21.  
  22.     font -- font specifier (name, system font, or (family, size, style)-tuple)
  23.     name -- name to use for this font configuration (defaults to a unique name)
  24.     exists -- does a named font by this name already exist?
  25.        Creates a new named font if False, points to the existing font if True.
  26.        Raises _tkinter.TclError if the assertion is false.
  27.  
  28.        the following are ignored if font is specified:
  29.  
  30.     family -- font 'family', e.g. Courier, Times, Helvetica
  31.     size -- font size in points
  32.     weight -- font thickness: NORMAL, BOLD
  33.     slant -- font slant: ROMAN, ITALIC
  34.     underline -- font underlining: false (0), true (1)
  35.     overstrike -- font strikeout: false (0), true (1)
  36.  
  37.     """
  38.     
  39.     def _set(self, kw):
  40.         options = []
  41.         for k, v in kw.items():
  42.             options.append('-' + k)
  43.             options.append(str(v))
  44.         
  45.         return tuple(options)
  46.  
  47.     
  48.     def _get(self, args):
  49.         options = []
  50.         for k in args:
  51.             options.append('-' + k)
  52.         
  53.         return tuple(options)
  54.  
  55.     
  56.     def _mkdict(self, args):
  57.         options = { }
  58.         for i in range(0, len(args), 2):
  59.             options[args[i][1:]] = args[i + 1]
  60.         
  61.         return options
  62.  
  63.     
  64.     def __init__(self, root = None, font = None, name = None, exists = False, **options):
  65.         if not root:
  66.             root = Tkinter._default_root
  67.         
  68.         if font:
  69.             font = root.tk.splitlist(root.tk.call('font', 'actual', font))
  70.         else:
  71.             font = self._set(options)
  72.         if not name:
  73.             name = 'font' + str(id(self))
  74.         
  75.         self.name = name
  76.         if exists:
  77.             self.delete_font = False
  78.             if self.name not in root.tk.call('font', 'names'):
  79.                 raise Tkinter._tkinter.TclError, 'named font %s does not already exist' % (self.name,)
  80.             
  81.             if font:
  82.                 root.tk.call('font', 'configure', self.name, *font)
  83.             
  84.         else:
  85.             root.tk.call('font', 'create', self.name, *font)
  86.             self.delete_font = True
  87.         self._root = root
  88.         self._split = root.tk.splitlist
  89.         self._call = root.tk.call
  90.  
  91.     
  92.     def __str__(self):
  93.         return self.name
  94.  
  95.     
  96.     def __eq__(self, other):
  97.         if self.name == other.name:
  98.             pass
  99.         return isinstance(other, Font)
  100.  
  101.     
  102.     def __getitem__(self, key):
  103.         return self.cget(key)
  104.  
  105.     
  106.     def __setitem__(self, key, value):
  107.         self.configure(**{
  108.             key: value })
  109.  
  110.     
  111.     def __del__(self):
  112.         
  113.         try:
  114.             if self.delete_font:
  115.                 self._call('font', 'delete', self.name)
  116.         except (KeyboardInterrupt, SystemExit):
  117.             raise 
  118.         except Exception:
  119.             pass
  120.  
  121.  
  122.     
  123.     def copy(self):
  124.         '''Return a distinct copy of the current font'''
  125.         return Font(self._root, **self.actual())
  126.  
  127.     
  128.     def actual(self, option = None):
  129.         '''Return actual font attributes'''
  130.         if option:
  131.             return self._call('font', 'actual', self.name, '-' + option)
  132.         else:
  133.             return self._mkdict(self._split(self._call('font', 'actual', self.name)))
  134.  
  135.     
  136.     def cget(self, option):
  137.         '''Get font attribute'''
  138.         return self._call('font', 'config', self.name, '-' + option)
  139.  
  140.     
  141.     def config(self, **options):
  142.         '''Modify font attributes'''
  143.         if options:
  144.             self._call('font', 'config', self.name, *self._set(options))
  145.         else:
  146.             return self._mkdict(self._split(self._call('font', 'config', self.name)))
  147.  
  148.     configure = config
  149.     
  150.     def measure(self, text):
  151.         '''Return text width'''
  152.         return int(self._call('font', 'measure', self.name, text))
  153.  
  154.     
  155.     def metrics(self, *options):
  156.         '''Return font metrics.
  157.  
  158.         For best performance, create a dummy widget
  159.         using this font before calling this method.'''
  160.         if options:
  161.             return int(self._call('font', 'metrics', self.name, self._get(options)))
  162.         else:
  163.             res = self._split(self._call('font', 'metrics', self.name))
  164.             options = { }
  165.             for i in range(0, len(res), 2):
  166.                 options[res[i][1:]] = int(res[i + 1])
  167.             
  168.             return options
  169.  
  170.  
  171.  
  172. def families(root = None):
  173.     '''Get font families (as a tuple)'''
  174.     if not root:
  175.         root = Tkinter._default_root
  176.     
  177.     return root.tk.splitlist(root.tk.call('font', 'families'))
  178.  
  179.  
  180. def names(root = None):
  181.     '''Get names of defined fonts (as a tuple)'''
  182.     if not root:
  183.         root = Tkinter._default_root
  184.     
  185.     return root.tk.splitlist(root.tk.call('font', 'names'))
  186.  
  187. if __name__ == '__main__':
  188.     root = Tkinter.Tk()
  189.     f = Font(family = 'times', size = 30, weight = NORMAL)
  190.     print f.actual()
  191.     print f.actual('family')
  192.     print f.actual('weight')
  193.     print f.config()
  194.     print f.cget('family')
  195.     print f.cget('weight')
  196.     print names()
  197.     print f.measure('hello'), f.metrics('linespace')
  198.     print f.metrics()
  199.     f = Font(font = ('Courier', 20, 'bold'))
  200.     print f.measure('hello'), f.metrics('linespace')
  201.     w = Tkinter.Label(root, text = 'Hello, world', font = f)
  202.     w.pack()
  203.     w = Tkinter.Button(root, text = 'Quit!', command = root.destroy)
  204.     w.pack()
  205.     fb = Font(font = w['font']).copy()
  206.     fb.config(weight = BOLD)
  207.     w.config(font = fb)
  208.     Tkinter.mainloop()
  209.  
  210.